//Clase que contiene los iconos de las herramientas y su gestion
public class Explorador {

  private int ancho, alto;
  private int numeroEtiquetas;
  private int separacionx,separaciony;
  private int posicion;
  private float altoImagen,anchoImagen;
  private ArrayList etiquetas;
  private PImage bg;
  private Herramienta herActual;

  //Constructor
  public Explorador(int alto) {
    this.alto = height-alto-100;
    this.ancho = 100;
    this.separacionx = 20;
    this.separaciony=10;
    this.posicion = 0;
    this.numeroEtiquetas = 5;
    this.etiquetas = new ArrayList();
    this.anchoImagen = this.ancho - 2*separacionx;
    println(anchoImagen);   
   bg=loadImage("explorador.png");   
  }
  //Funcion que muestra el explorador
  void display() {
     image(bg,width-ancho,0,ancho,alto);
     image(bg,width-ancho,alto,ancho,100);
    Iterator i = etiquetas.iterator();
    while(i.hasNext()){
     Herramienta her = (Herramienta)i.next(); 
     her.display();    
    }
    fill(0,255,0);   
  }
  public void resetHerActual(){
   if(herActual!=null){
   herActual.setActiva(false);
   herActual=null; }
  }
  public void drawActive(){
    noFill();
    strokeWeight(5);
   if(herActual!=null){
    int tipo = herActual.getTipo();
    if(tipo==1){
     rect(width-ancho/2 -25,alto+10,50,50); 
    }
    else if(tipo==2){
     ellipse(width-ancho/2,alto+40,50,50); 
    }
    else if(tipo==3){
     line(width-ancho/2 ,alto+20,width-ancho/2+20 ,alto+30); 
     line(width-ancho/2+20 ,alto+30,width-ancho/2 ,alto+40);
     line(width-ancho/2 ,alto+40,width-ancho/2-30,alto+10);
     line(width-ancho/2-30,alto+10,width-ancho/2 ,alto+20);
    }
    else if(tipo==4){
     point(width-ancho/2,alto+40); 
    }
    else if(tipo==5){
     point(width-ancho/2-20,alto+40); 
    point(width-ancho/2,alto+40); 
   point(width-ancho/2,alto+60);  
    }
   } 
   strokeWeight(1);
  }
  //Funcion que se activa al presionar el mouse
  boolean mousePressed(){
   if(mouseX > width-ancho && mouseX < width && mouseY>0 && mouseY < alto){
    return true;}
    else{
      return false;
    }
  }
  //Funcion que retorna la herramienta que se ha presionado
  Herramienta getHerramienta(boolean bol) {
    
    Iterator i = etiquetas.iterator();    
    while(i.hasNext()){
     Herramienta her = (Herramienta) i.next();
      if(her.isPressed()){
        if(bol){
          if(herActual!=null){
     herActual.setActiva(false); 
    }
        herActual = her;
        herActual.setActiva(true);}
      return her;
      }
    }
    return null;
  }
  //Getter
  public int getAncho(){
   return this.ancho; 
  }
  //Funcion que carga la configuracion de herramientas
  public void cargarConf(PApplet parent,String fichero){
    
    XMLElement element = new XMLElement(parent,fichero);
    numeroEtiquetas = element.getChildCount();
    println("numero herramientas: "+numeroEtiquetas);   
    this.altoImagen =( alto-(this.separaciony*(numeroEtiquetas +1 ) ))/numeroEtiquetas;
    this.altoImagen = this.altoImagen>height/6?height/6:this.altoImagen;    
    for(int i=0;i<numeroEtiquetas;i++){
     XMLElement tool = element.getChild(i);          
     if(tool.getName().equals("square")){
       int an=-1;
     int al=-1;
     String nombre="default";
       Cuadrado her=null;
     if(tool.hasAttribute("name")){
        nombre = tool.getStringAttribute("name");
       her =  new Cuadrado(width-ancho+separacionx,(int)(separaciony + (i*altoImagen)+(i*separaciony)),(int)altoImagen,(int)this.anchoImagen,nombre);
       println(her);
     }          
      if(tool.hasAttribute("width")){
        an = Integer.valueOf(tool.getStringAttribute("width"));
        her.setResX(an);
      }
      if(tool.hasAttribute("height")){
        al = Integer.valueOf(tool.getStringAttribute("height"));
        her.setResY(al);
      }
    etiquetas.add(her);
  }
  else if(tool.getName().equals("circle")){
    Circulo her = null;
    String nombre = "default";
    int radio=-1;
    
     if(tool.hasAttribute("name")){
        nombre = tool.getStringAttribute("name");
       her =  new Circulo(width-ancho+separacionx,(int)(separaciony + (i*altoImagen)+(i*separaciony)),(int)altoImagen,(int)this.anchoImagen,nombre);
       println(her);
     }
     if(tool.hasAttribute("radio")){
       radio = Integer.valueOf(tool.getStringAttribute("radio"));
       her.setRadio(radio);
     }
     etiquetas.add(her);
  }  
  else if(tool.getName().equals("poligon")){
    Poligono her = null;
    String nombre = "default";
    int lados=-1;
    
     if(tool.hasAttribute("name")){
        nombre = tool.getStringAttribute("name");
       her =  new Poligono(width-ancho+separacionx,(int)(separaciony + (i*altoImagen)+(i*separaciony)),(int)altoImagen,(int)this.anchoImagen,nombre);
       println(her);
     }
     if(tool.hasAttribute("sides")){
       lados = Integer.valueOf(tool.getStringAttribute("sides"));
       her.setResNLados(lados);
     }
     etiquetas.add(her);
  }  
  else if(tool.getName().equals("pointsec")){
    Secuencia her = null;
    String nombre = "default";
    int lados=-1;      
     if(tool.hasAttribute("name")){
        nombre = tool.getStringAttribute("name");
       her =  new Secuencia(width-ancho+separacionx,(int)(separaciony + (i*altoImagen)+(i*separaciony)),(int)altoImagen,(int)this.anchoImagen,nombre);
       println(her);
     }
     if(tool.hasAttribute("points")){
       lados = Integer.valueOf(tool.getStringAttribute("points"));
       her.setResNLados(lados);
     }
     etiquetas.add(her);
  }  
  else if(tool.getName().equals("point")){
    Punto her = null;
    String nombre = "default";        
     if(tool.hasAttribute("name")){
        nombre = tool.getStringAttribute("name");
       her =  new Punto(width-ancho+separacionx,(int)(separaciony + (i*altoImagen)+(i*separaciony)),(int)altoImagen,(int)this.anchoImagen,nombre);
       println(her);
     }     
     etiquetas.add(her);
  }
 
  }
 
}
}

